<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<title>nrf51/Source/twi_master/twi_hw_master.c Source File</title>
<link href="tabs.css" rel="stylesheet" type="text/css" />
<link href="doxygen.css" rel="stylesheet" type="text/css" />
<link href="alias.css" rel="stylesheet" type="text/css" />
<script type="text/javascript" src="alias.js"></script>

<link href="navtree.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="resize.js"></script>
<script type="text/javascript" src="navtree.js"></script>
<script type="text/javascript">
  $(document).ready(initResizable);
</script>
<link href="search/search.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="search/search.js"></script>
<script type="text/javascript">
  $(document).ready(function() { searchBox.OnSelectItem(0); });
</script>


<script type="text/javascript">
  jQuery(document).ready(function () {
    if(gref){ // Number all _img and _table classes
      gref();
    }
  });
</script>

</head>
<body>
<div id="top"><!-- do not remove this div! -->

<div id="titlearea">
<table cellspacing="0" cellpadding="0">
 <tbody>
 <tr style="height: 56px;">
  
  
  <td style="padding-left: 0.5em;">
   <div id="projectname">nRF51 General Code Examples
   
   </div>
   
  </td>
  
  
  
 </tr>
 </tbody>
</table>
</div>

<!-- Generated by Doxygen 1.7.5 -->
<script type="text/javascript">
var searchBox = new SearchBox("searchBox", "search",false,'Search');
</script>
  <div id="navrow1" class="tabs">
    <ul class="tablist">
      <li><a href="index.html"><span>Main&#160;Page</span></a></li>
      <li><a href="modules.html"><span>Modules</span></a></li>
      <li><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
      <li class="current"><a href="files.html"><span>Files</span></a></li>
      <li>
        <div id="MSearchBox" class="MSearchBoxInactive">
        <span class="left">
          <img id="MSearchSelect" src="search/mag_sel.png"
               onmouseover="return searchBox.OnSearchSelectShow()"
               onmouseout="return searchBox.OnSearchSelectHide()"
               alt=""/>
          <input type="text" id="MSearchField" value="Search" accesskey="S"
               onfocus="searchBox.OnSearchFieldFocus(true)" 
               onblur="searchBox.OnSearchFieldFocus(false)" 
               onkeyup="searchBox.OnSearchFieldChange(event)"/>
          </span><span class="right">
            <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
          </span>
        </div>
      </li>
    </ul>
  </div>
  <div id="navrow2" class="tabs2">
    <ul class="tablist">
      <li><a href="files.html"><span>File&#160;List</span></a></li>
      <li><a href="globals.html"><span>Globals</span></a></li>
    </ul>
  </div>
</div>
<div id="side-nav" class="ui-resizable side-nav-resizable">
  <div id="nav-tree">
    <div id="nav-tree-contents">
    </div>
  </div>
  <div id="splitbar" style="-moz-user-select:none;" 
       class="ui-resizable-handle">
  </div>
</div>
<script type="text/javascript">
  initNavTree('twi__hw__master_8c.html','');
</script>
<div id="doc-content">
<div class="header">
  <div class="headertitle">
<div class="title">nrf51/Source/twi_master/twi_hw_master.c</div>  </div>
</div>
<div class="contents">
<div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/* Copyright (c) 2009 Nordic Semiconductor. All Rights Reserved.</span>
<a name="l00002"></a>00002 <span class="comment"> *</span>
<a name="l00003"></a>00003 <span class="comment"> * The information contained herein is confidential property of Nordic</span>
<a name="l00004"></a>00004 <span class="comment"> * Semiconductor ASA.Terms and conditions of usage are described in detail</span>
<a name="l00005"></a>00005 <span class="comment"> * in NORDIC SEMICONDUCTOR STANDARD SOFTWARE LICENSE AGREEMENT.</span>
<a name="l00006"></a>00006 <span class="comment"> *</span>
<a name="l00007"></a>00007 <span class="comment"> * Licensees are granted free, non-transferable use of the information. NO</span>
<a name="l00008"></a>00008 <span class="comment"> * WARRANTY of ANY KIND is provided. This heading must NOT be removed from</span>
<a name="l00009"></a>00009 <span class="comment"> * the file.</span>
<a name="l00010"></a>00010 <span class="comment"> *</span>
<a name="l00011"></a>00011 <span class="comment"> */</span>
<a name="l00012"></a>00012 
<a name="l00013"></a>00013 <span class="preprocessor">#include &lt;stdbool.h&gt;</span>
<a name="l00014"></a>00014 <span class="preprocessor">#include &lt;stdint.h&gt;</span>
<a name="l00015"></a>00015 <span class="preprocessor">#include &quot;nrf.h&quot;</span>
<a name="l00016"></a>00016 <span class="preprocessor">#include &quot;<a class="code" href="twi__master_8h.html" title="Software controlled TWI Master driver.">twi_master.h</a>&quot;</span>
<a name="l00017"></a>00017 <span class="preprocessor">#include &quot;twi_master_config.h&quot;</span>
<a name="l00018"></a>00018 <span class="preprocessor">#include &quot;nrf_delay.h&quot;</span>
<a name="l00019"></a>00019 <span class="preprocessor">#include &quot;nrf_gpio.h&quot;</span>
<a name="l00020"></a>00020 
<a name="l00021"></a>00021 <span class="comment">/* Max cycles approximately to wait on RXDREADY and TXDREADY event, this is optimum way instead of using timers, this is not power aware, negetive side is this is not power aware */</span>
<a name="l00022"></a>00022 <span class="preprocessor">#define MAX_TIMEOUT_LOOPS             (10000UL)        </span>
<a name="l00024"></a>00024 <span class="preprocessor">static bool twi_master_write(uint8_t *data, uint8_t data_length, bool issue_stop_condition)</span>
<a name="l00025"></a>00025 <span class="preprocessor"></span>{
<a name="l00026"></a>00026     uint32_t timeout = MAX_TIMEOUT_LOOPS;   <span class="comment">/* max loops to wait for EVENTS_TXDSENT event*/</span>
<a name="l00027"></a>00027 
<a name="l00028"></a>00028     <span class="keywordflow">if</span>(data_length == 0)
<a name="l00029"></a>00029     {
<a name="l00030"></a>00030         <span class="comment">/* gently return false for requesting data of size 0 */</span>
<a name="l00031"></a>00031         <span class="keywordflow">return</span> <span class="keyword">false</span>;
<a name="l00032"></a>00032     }
<a name="l00033"></a>00033 
<a name="l00034"></a>00034     NRF_TWI1-&gt;TXD = *data++;
<a name="l00035"></a>00035     NRF_TWI1-&gt;TASKS_STARTTX = 1;
<a name="l00036"></a>00036     <span class="keywordflow">while</span>(<span class="keyword">true</span>)
<a name="l00037"></a>00037     {
<a name="l00038"></a>00038         <span class="keywordflow">while</span>(NRF_TWI1-&gt;EVENTS_TXDSENT == 0 &amp;&amp; (--timeout))
<a name="l00039"></a>00039         {
<a name="l00040"></a>00040         }
<a name="l00041"></a>00041 
<a name="l00042"></a>00042         <span class="keywordflow">if</span>(timeout == 0)
<a name="l00043"></a>00043         {
<a name="l00044"></a>00044             <span class="comment">/* timeout before receiving event*/</span>
<a name="l00045"></a>00045             <span class="keywordflow">return</span> <span class="keyword">false</span>;
<a name="l00046"></a>00046         }
<a name="l00047"></a>00047 
<a name="l00048"></a>00048         NRF_TWI1-&gt;EVENTS_TXDSENT = 0;
<a name="l00049"></a>00049         <span class="keywordflow">if</span> (--data_length == 0)
<a name="l00050"></a>00050             <span class="keywordflow">break</span>;
<a name="l00051"></a>00051 
<a name="l00052"></a>00052         NRF_TWI1-&gt;TXD = *data++;
<a name="l00053"></a>00053     }
<a name="l00054"></a>00054     <span class="keywordflow">if</span> (issue_stop_condition)
<a name="l00055"></a>00055     {
<a name="l00056"></a>00056         NRF_TWI1-&gt;TASKS_STOP = 1;
<a name="l00057"></a>00057     }
<a name="l00058"></a>00058 
<a name="l00059"></a>00059     <span class="comment">/* wait until stop sequence is sent and clear the EVENTS_STOPPED */</span>
<a name="l00060"></a>00060     <span class="keywordflow">while</span>(NRF_TWI1-&gt;EVENTS_STOPPED == 0)
<a name="l00061"></a>00061     {
<a name="l00062"></a>00062     }
<a name="l00063"></a>00063     NRF_TWI1-&gt;EVENTS_STOPPED = 0;
<a name="l00064"></a>00064 
<a name="l00065"></a>00065     <span class="keywordflow">return</span> <span class="keyword">true</span>;
<a name="l00066"></a>00066 }
<a name="l00067"></a>00067 
<a name="l00068"></a>00068 <span class="keyword">static</span> <span class="keywordtype">bool</span> twi_master_read(uint8_t *data, uint8_t data_length, <span class="keywordtype">bool</span> issue_stop_condition)
<a name="l00069"></a>00069 {
<a name="l00070"></a>00070     uint32_t timeout = MAX_TIMEOUT_LOOPS;   <span class="comment">/* max loops to wait for RXDREADY event*/</span>
<a name="l00071"></a>00071 
<a name="l00072"></a>00072     <span class="keywordflow">if</span>(data_length == 0)
<a name="l00073"></a>00073     {
<a name="l00074"></a>00074         <span class="comment">/* gently return false for requesting data of size 0 */</span>
<a name="l00075"></a>00075         <span class="keywordflow">return</span> <span class="keyword">false</span>;
<a name="l00076"></a>00076     }
<a name="l00077"></a>00077 
<a name="l00078"></a>00078 
<a name="l00079"></a>00079     <span class="keywordflow">if</span> (data_length == 1)
<a name="l00080"></a>00080     {
<a name="l00081"></a>00081         NRF_PPI-&gt;CH0_TEP = (uint32_t)&amp;NRF_TWI1-&gt;TASKS_STOP;
<a name="l00082"></a>00082     }
<a name="l00083"></a>00083     <span class="keywordflow">else</span>
<a name="l00084"></a>00084     {
<a name="l00085"></a>00085         NRF_PPI-&gt;CH0_TEP = (uint32_t)&amp;NRF_TWI1-&gt;TASKS_SUSPEND;
<a name="l00086"></a>00086     }
<a name="l00087"></a>00087     NRF_PPI-&gt;CHENSET = PPI_CHENSET_CH0_Msk;
<a name="l00088"></a>00088     NRF_TWI1-&gt;TASKS_STARTRX = 1;
<a name="l00089"></a>00089     <span class="keywordflow">while</span>(<span class="keyword">true</span>)
<a name="l00090"></a>00090     {
<a name="l00091"></a>00091         <span class="keywordflow">while</span>((NRF_TWI1-&gt;EVENTS_RXDREADY == 0) &amp;&amp; (--timeout))
<a name="l00092"></a>00092         {
<a name="l00093"></a>00093         }
<a name="l00094"></a>00094 
<a name="l00095"></a>00095         <span class="keywordflow">if</span>(timeout == 0)
<a name="l00096"></a>00096         {
<a name="l00097"></a>00097             <span class="comment">/* timeout before receiving event*/</span>
<a name="l00098"></a>00098             <span class="keywordflow">return</span> <span class="keyword">false</span>;
<a name="l00099"></a>00099         }
<a name="l00100"></a>00100 
<a name="l00101"></a>00101         NRF_TWI1-&gt;EVENTS_RXDREADY = 0;
<a name="l00102"></a>00102         *data++ = NRF_TWI1-&gt;RXD;
<a name="l00103"></a>00103 
<a name="l00104"></a>00104         <span class="comment">/* configure PPI to stop TWI master before we get last BB event */</span>
<a name="l00105"></a>00105         <span class="keywordflow">if</span> (--data_length == 1)
<a name="l00106"></a>00106         {
<a name="l00107"></a>00107             NRF_PPI-&gt;CH0_TEP = (uint32_t)&amp;NRF_TWI1-&gt;TASKS_STOP;
<a name="l00108"></a>00108         }
<a name="l00109"></a>00109 
<a name="l00110"></a>00110         <span class="keywordflow">if</span> (data_length == 0)
<a name="l00111"></a>00111             <span class="keywordflow">break</span>;
<a name="l00112"></a>00112 
<a name="l00113"></a>00113         NRF_TWI1-&gt;TASKS_RESUME = 1;
<a name="l00114"></a>00114     }
<a name="l00115"></a>00115 
<a name="l00116"></a>00116     <span class="comment">/* wait until stop sequence is sent and clear the EVENTS_STOPPED */</span>
<a name="l00117"></a>00117     <span class="keywordflow">while</span>(NRF_TWI1-&gt;EVENTS_STOPPED == 0)
<a name="l00118"></a>00118     {
<a name="l00119"></a>00119     }
<a name="l00120"></a>00120     NRF_TWI1-&gt;EVENTS_STOPPED = 0;
<a name="l00121"></a>00121 
<a name="l00122"></a>00122     NRF_PPI-&gt;CHENCLR = PPI_CHENCLR_CH0_Msk;
<a name="l00123"></a>00123     <span class="keywordflow">return</span> <span class="keyword">true</span>;
<a name="l00124"></a>00124 }
<a name="l00125"></a>00125 
<a name="l00133"></a>00133 <span class="keyword">static</span> <span class="keywordtype">bool</span> twi_master_clear_bus(<span class="keywordtype">void</span>)
<a name="l00134"></a>00134 {
<a name="l00135"></a>00135     <span class="keywordtype">bool</span> bus_clear;
<a name="l00136"></a>00136 
<a name="l00137"></a>00137     <a class="code" href="group__lib__driver__twi__master.html#ga112251118224f5623c20423efce89ae8">TWI_SDA_HIGH</a>();
<a name="l00138"></a>00138     <a class="code" href="group__lib__driver__twi__master.html#ga7635564961ef4b40ebe54c566b25dc75">TWI_SCL_HIGH</a>();
<a name="l00139"></a>00139     <a class="code" href="group__lib__driver__twi__master.html#ga0bdffa7178084c5e1b2e11d3a95c5e85">TWI_DELAY</a>();
<a name="l00140"></a>00140 
<a name="l00141"></a>00141     <span class="keywordflow">if</span> (<a class="code" href="group__lib__driver__twi__master.html#ga0a7e559c3bceb5b50ff3e51cabb21f73">TWI_SDA_READ</a>() == 1 &amp;&amp; <a class="code" href="group__lib__driver__twi__master.html#ga45cf9fc8c9487711c3b8457b8e1116b2">TWI_SCL_READ</a>() == 1)
<a name="l00142"></a>00142     {
<a name="l00143"></a>00143         bus_clear = <span class="keyword">true</span>;
<a name="l00144"></a>00144     }
<a name="l00145"></a>00145     <span class="keywordflow">else</span>
<a name="l00146"></a>00146     {
<a name="l00147"></a>00147         bus_clear = <span class="keyword">false</span>;
<a name="l00148"></a>00148 
<a name="l00149"></a>00149         <span class="comment">// Clock max 18 pulses worst case scenario(9 for master to send the rest of command and 9 for slave to respond) to SCL line and wait for SDA come high</span>
<a name="l00150"></a>00150         <span class="keywordflow">for</span> (uint_fast8_t i=18; i--;)
<a name="l00151"></a>00151         {
<a name="l00152"></a>00152             <a class="code" href="group__lib__driver__twi__master.html#gafef260a0ebd7d5669cd2731d2c20f55d">TWI_SCL_LOW</a>();
<a name="l00153"></a>00153             <a class="code" href="group__lib__driver__twi__master.html#ga0bdffa7178084c5e1b2e11d3a95c5e85">TWI_DELAY</a>();
<a name="l00154"></a>00154             <a class="code" href="group__lib__driver__twi__master.html#ga7635564961ef4b40ebe54c566b25dc75">TWI_SCL_HIGH</a>();
<a name="l00155"></a>00155             <a class="code" href="group__lib__driver__twi__master.html#ga0bdffa7178084c5e1b2e11d3a95c5e85">TWI_DELAY</a>();
<a name="l00156"></a>00156 
<a name="l00157"></a>00157             <span class="keywordflow">if</span> (<a class="code" href="group__lib__driver__twi__master.html#ga0a7e559c3bceb5b50ff3e51cabb21f73">TWI_SDA_READ</a>() == 1)
<a name="l00158"></a>00158             {
<a name="l00159"></a>00159                 bus_clear = <span class="keyword">true</span>;
<a name="l00160"></a>00160                 <span class="keywordflow">break</span>;
<a name="l00161"></a>00161             }
<a name="l00162"></a>00162         }
<a name="l00163"></a>00163     }
<a name="l00164"></a>00164 
<a name="l00165"></a>00165     <span class="keywordflow">return</span> bus_clear;
<a name="l00166"></a>00166 }
<a name="l00167"></a>00167 
<a name="l00168"></a><a class="code" href="group__lib__driver__twi__master.html#ga148f1dd10bc0248c6c6c5336ce07a540">00168</a> <span class="keywordtype">bool</span> <a class="code" href="group__lib__driver__twi__master.html#ga148f1dd10bc0248c6c6c5336ce07a540">twi_master_init</a>(<span class="keywordtype">void</span>)
<a name="l00169"></a>00169 {
<a name="l00170"></a>00170     <span class="comment">/* The two wire interface 1 (TWI1) master shares the SPI1 base address.</span>
<a name="l00171"></a>00171 <span class="comment">     power the device, wait for it until it is powered up and enable interrupts */</span>
<a name="l00172"></a>00172     NRF_POWER-&gt;PERPOWER |= POWER_PERPOWER_SPI1_TWI1_Msk | POWER_PERPOWER_PPI_Msk;
<a name="l00173"></a>00173     <span class="keywordflow">while</span> ((NRF_POWER-&gt;PERRDY &amp; POWER_PERRDY_SPI1_TWI1_Msk) == 0)
<a name="l00174"></a>00174     {
<a name="l00175"></a>00175     }
<a name="l00176"></a>00176     <span class="keywordflow">while</span> ((NRF_POWER-&gt;PERRDY &amp; POWER_PERRDY_PPI_Msk) == 0)
<a name="l00177"></a>00177     {
<a name="l00178"></a>00178     }
<a name="l00179"></a>00179     
<a name="l00180"></a>00180     <span class="comment">/* To secure correct signal levels on the pins used by the TWI</span>
<a name="l00181"></a>00181 <span class="comment">       master when the system is in OFF mode, and when the TWI master is </span>
<a name="l00182"></a>00182 <span class="comment">       disabled, these pins must be configured in the GPIO peripheral.</span>
<a name="l00183"></a>00183 <span class="comment">    */</span>
<a name="l00184"></a>00184     NRF_GPIO-&gt;PIN_CNF[TWI_MASTER_CONFIG_CLOCK_PIN_NUMBER] = 
<a name="l00185"></a>00185         (GPIO_PIN_CNF_SENSE_Disabled &lt;&lt; GPIO_PIN_CNF_SENSE_Pos)
<a name="l00186"></a>00186       | (GPIO_PIN_CNF_DRIVE_S0D1     &lt;&lt; GPIO_PIN_CNF_DRIVE_Pos)
<a name="l00187"></a>00187       | (GPIO_PIN_CNF_PULL_Pullup    &lt;&lt; GPIO_PIN_CNF_PULL_Pos)
<a name="l00188"></a>00188       | (GPIO_PIN_CNF_INPUT_Connect  &lt;&lt; GPIO_PIN_CNF_INPUT_Pos)
<a name="l00189"></a>00189       | (GPIO_PIN_CNF_DIR_Input      &lt;&lt; GPIO_PIN_CNF_DIR_Pos);    
<a name="l00190"></a>00190 
<a name="l00191"></a>00191     NRF_GPIO-&gt;PIN_CNF[TWI_MASTER_CONFIG_DATA_PIN_NUMBER] = 
<a name="l00192"></a>00192         (GPIO_PIN_CNF_SENSE_Disabled &lt;&lt; GPIO_PIN_CNF_SENSE_Pos)
<a name="l00193"></a>00193       | (GPIO_PIN_CNF_DRIVE_S0D1     &lt;&lt; GPIO_PIN_CNF_DRIVE_Pos)
<a name="l00194"></a>00194       | (GPIO_PIN_CNF_PULL_Pullup    &lt;&lt; GPIO_PIN_CNF_PULL_Pos)
<a name="l00195"></a>00195       | (GPIO_PIN_CNF_INPUT_Connect  &lt;&lt; GPIO_PIN_CNF_INPUT_Pos)
<a name="l00196"></a>00196       | (GPIO_PIN_CNF_DIR_Input      &lt;&lt; GPIO_PIN_CNF_DIR_Pos);    
<a name="l00197"></a>00197 
<a name="l00198"></a>00198     NRF_TWI1-&gt;EVENTS_RXDREADY = 0;
<a name="l00199"></a>00199     NRF_TWI1-&gt;EVENTS_TXDSENT = 0;
<a name="l00200"></a>00200     NRF_TWI1-&gt;PSELSCL = TWI_MASTER_CONFIG_CLOCK_PIN_NUMBER;
<a name="l00201"></a>00201     NRF_TWI1-&gt;PSELSDA = TWI_MASTER_CONFIG_DATA_PIN_NUMBER;
<a name="l00202"></a>00202     NRF_TWI1-&gt;FREQUENCY = TWI_FREQUENCY_FREQUENCY_K100 &lt;&lt; TWI_FREQUENCY_FREQUENCY_Pos;
<a name="l00203"></a>00203     NRF_PPI-&gt;CH0_EEP = (uint32_t)&amp;NRF_TWI1-&gt;EVENTS_BB;
<a name="l00204"></a>00204     NRF_PPI-&gt;CH0_TEP = (uint32_t)&amp;NRF_TWI1-&gt;TASKS_SUSPEND;
<a name="l00205"></a>00205     NRF_PPI-&gt;CHENCLR = PPI_CHENCLR_CH0_Msk;
<a name="l00206"></a>00206     NRF_TWI1-&gt;ENABLE = TWI_ENABLE_ENABLE_Enabled &lt;&lt; TWI_ENABLE_ENABLE_Pos;
<a name="l00207"></a>00207 
<a name="l00208"></a>00208     <span class="keywordflow">return</span> twi_master_clear_bus();
<a name="l00209"></a>00209 }
<a name="l00210"></a>00210 
<a name="l00211"></a><a class="code" href="group__lib__driver__twi__master.html#ga36e8039d4cbb4f66c0cf0cf1e3a72445">00211</a> <span class="keywordtype">bool</span> <a class="code" href="group__lib__driver__twi__master.html#ga36e8039d4cbb4f66c0cf0cf1e3a72445">twi_master_transfer</a>(uint8_t address, uint8_t *data, uint8_t data_length, <span class="keywordtype">bool</span> issue_stop_condition)
<a name="l00212"></a>00212 {
<a name="l00213"></a>00213     <span class="keywordtype">bool</span> transfer_succeeded = <span class="keyword">true</span>;
<a name="l00214"></a>00214     <span class="keywordflow">if</span> (data_length &gt; 0 &amp;&amp; twi_master_clear_bus())
<a name="l00215"></a>00215     {
<a name="l00216"></a>00216         NRF_TWI1-&gt;ADDRESS = (address &gt;&gt; 1);
<a name="l00217"></a>00217 
<a name="l00218"></a>00218         <span class="keywordflow">if</span> ((address &amp; <a class="code" href="group__lib__driver__twi__master.html#ga67c0f91739433360f513b097acf11946" title="If this bit is set in the address field, transfer direction is from slave to master.">TWI_READ_BIT</a>) != 0)
<a name="l00219"></a>00219         {
<a name="l00220"></a>00220             transfer_succeeded = twi_master_read(data, data_length, issue_stop_condition);
<a name="l00221"></a>00221         }
<a name="l00222"></a>00222         <span class="keywordflow">else</span>
<a name="l00223"></a>00223         {
<a name="l00224"></a>00224             transfer_succeeded = twi_master_write(data, data_length, issue_stop_condition);
<a name="l00225"></a>00225         }
<a name="l00226"></a>00226     }
<a name="l00227"></a>00227     <span class="keywordflow">return</span> transfer_succeeded;
<a name="l00228"></a>00228 }
<a name="l00229"></a>00229 
<a name="l00230"></a>00230 <span class="comment">/*lint --flb &quot;Leave library region&quot; */</span>
</pre></div></div>
</div>
  <div id="nav-path" class="navpath">
    <ul>
      <li class="navelem"><b>twi_hw_master.c</b>      </li>
<!-- window showing the filter options -->
<div id="MSearchSelectWindow"
     onmouseover="return searchBox.OnSearchSelectShow()"
     onmouseout="return searchBox.OnSearchSelectHide()"
     onkeydown="return searchBox.OnSearchSelectKey(event)">
<a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(0)"><span class="SelectionMark">&#160;</span>All</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(1)"><span class="SelectionMark">&#160;</span>Data Structures</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(2)"><span class="SelectionMark">&#160;</span>Files</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(3)"><span class="SelectionMark">&#160;</span>Functions</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(4)"><span class="SelectionMark">&#160;</span>Variables</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(5)"><span class="SelectionMark">&#160;</span>Enumerations</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(6)"><span class="SelectionMark">&#160;</span>Enumerator</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(7)"><span class="SelectionMark">&#160;</span>Defines</a></div>

<!-- iframe showing the search results (closed by default) -->
<div id="MSearchResultsWindow">
<iframe src="javascript:void(0)" frameborder="0" 
        name="MSearchResults" id="MSearchResults">
</iframe>
</div>


    <li class="footer">
      Copyright &copy 2006-2011 <a href="http://www.nordicsemi.no" style="text-decoration:none">Nordic Semiconductor</a>.
      All Rights Reserved.
      <a href="disclaimer.html">Disclaimer</a>
    </li>
   </ul>
 </div>


</body>
</html>
